import wx from 'jweixin-module'
import Request from '../utils/request.js'

function sdkConfig(jsApiName) {
	// window.location.host = 'https://jindezhen.app65.cn'
	return new Promise(async (reslove, reject) => {
		const {
			data
		} = await Request.http({
			url: 'api/api/getWxShare',
			data: {
				share_url: window.location.href.split('#')[0]
			}
		})
		console.log(data, 'data')
		wx.config({
			debug: false, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来，若要查看传入的参数，可以在 pc 端打开，参数信息会通过 log 打出，仅在 pc 端时才会打印。
			appId: 'wx17fb6725c74235b4', // 必填，公众号的唯一标识
			timestamp: data.timeStamp, // 必填，生成签名的时间戳
			nonceStr: data.nonceStr, // 必填，生成签名的随机串
			signature: data.sign, // 必填，签名
			jsApiList: [jsApiName,
				'onMenuShareTimeline',
				'onMenuShareAppMessage',
				'updateAppMessageShareData',
				'updateTimelineShareData',
				'scanQRCode', 
				'chooseWXPay','hideMenuItems'
			] // 必填，需要使用的 JS 接口列表
		});
		wx.ready(function() {
			wx.hideMenuItems({
			      menuList: ["menuItem:copyUrl"] // 要隐藏的菜单项，只能隐藏“传播类”和“保护类”按钮
			  });
			 // wx.hideAllNonBaseMenuItem(); //隐藏所有非基础按钮接口
			// config信息验证后会执行 ready 方法，所有接口调用都必须在 config 接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在 ready 函数中。
			reslove(true)
		});
		wx.error(function() {
			//sdk验证失败
			reject(false)
		})
	})
}
//获取用户位置信息
export default {
	wxGetLocation() {
		return new Promise((reslove, reject) => {
			sdkConfig('getLocation').then(res => {
				wx.getLocation({
					type: 'gcj02', // 默认为wgs84的 gps 坐标，如果要返回直接给 openLocation 用的火星坐标，可传入'gcj02'
					// isHighAccuracy:true,
					success: function(res) {
						var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
						var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
						var speed = res.speed; // 速度，以米/每秒计
						var accuracy = res.accuracy; // 位置精度
						reslove({
							latitude,
							longitude,
							speed,
							accuracy
						})
					},
					fail: function(err) {
						reject()
					}
				});
			}).catch(err => {
				reject()
			})
		})
	},
	//扫码
	wxScanQRCode() {
		return new Promise((reslove, reject) => {
			console.log(reslove, reject,'reslove')
			sdkConfig('scanQRCode').then(res => {
				console.log(res, 'res')
				wx.scanQRCode({
					needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
					scanType: ["qrCode"], // 可以指定扫二维码还是一维码，默认二者都有
					success: function(res) {
						console.log(11, res)
						reslove(res)
					}
				});

			}).catch(err => {
				console.log(err, 'err')
				reject()
			})
		})
	},
	//付款
	wxchooseWXPay: function(respon,
		paySuccess,
		payScancel,
		payFail) {
		wx.config({
			debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
			appId: 'wx17fb6725c74235b4', // 必填，公众号的唯一标识
			timestamp: respon.rows.timeStamp, // 必填，生成签名的时间戳
			nonceStr: respon.rows.nonceStr, // 必填，生成签名的随机串
			signature: respon.rows.sign, // 必填，签名
			jsApiList: ['chooseWXPay'] // 必填，需要使用的JS接口列表
		});
		wx.ready(function() {
			// config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
			wx.checkJsApi({
				jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表，所有JS接口列表见附录2,
				success: function(res_s) {
					// 以键值对的形式返回，可用的api值true，不可用为false
					// 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
				}
			});
			wx.chooseWXPay({
				timestamp: respon.rows
					.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
				nonceStr: respon.rows.nonceStr, // 支付签名随机串，不长于 32 位
				package: respon.rows
					.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
				signType: 'MD5', // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
				paySign: respon.rows.paySign, // 支付签名
				success: paySuccess,
				cancel: payScancel,
				fail: payFail
			})
		});
	},
	wxshare(share) {
		return new Promise((reslove, reject) => {
			sdkConfig('updateAppMessageShareData').then(res => {
				wx.updateAppMessageShareData(share)
			}).catch(err => {
				console.log(err, 'err')
				reject()
			})
		})
	},

}